昨天已經完成Oka三態變身的UI,今天將繼續製作變身功能的主要程式。
首先介紹Oka物件的架構
Player物件中有前幾天寫的control操控腳本以及碰撞器、Rigidbody等等,可以說是主角的主要物件。底下的子物件前三項Oka_ice、Oka_water、Oka_gas物件則是掌控各個型態的外表及能力。
我可以將各型態個別的操作程式以及不同的外觀及動畫放在各項物件底下,並在母物件Player上利用程式控制三個子物件的開關就能完成型態切換的功能。
以Oka_water為例,三個物件底下都有SpriteRenderer、animator、Skill腳本。題外話,其中三物件的animator及Skill腳本有需多地方相似,因此使用繼承或複寫功能可以方便快速進行製作。
我們需要先在母物件Player上建立PlayerChange腳本。並設立以下變數:
在Start中設定好各項物件連結
接下來在Update中作以下設定
重點來了,在變身函式中透過ID的變化計算可以知道要往哪一個型態變身
例如現在是水型態(ID=1) 玩家選擇變成冰型態(ID=0) 透過以上計算得到X= 0-1 = -1,因此會進行change previous,從下圖看就是往逆時針的型態變身。
當呼叫Skill_base變身時,Skill_base會呼叫不同的變身動畫。下圖為Skill_base裡面的函式
動畫完成後Skill_base會呼叫PlayerChange的ChangeFinish函式,將原本的型態子物件關閉,打開新型態的子物件,並且更新現在型態的ID。
注意左側子物件的變化
再次看到這個變身效果,真的很幸運我們組的美術很有能力,變身的動畫效果實在太讚啦!
到這邊就完成變身效果的介紹囉,不果還是有個小瑕疵,當我暗助變身鍵切換型態時,左右鍵依然會讓主角移動。真正預期的效果是,當我開啟變身UI時可以限制主角移動,直到變身結束。
為了達成這個目標還需要一個"狀態機"功能,它就留給明天的篇幅囉。